package net.qiqbframework.spring.stereotype;


import net.qiqbframework.commandhandling.CommandHandler;
import net.qiqbframework.modelling.domain.AggregateRoot;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 标注一个聚合对象（或者聚合根）类上。
 * 被标注的聚合类上方法如果被{@link CommandHandler}标注，将可以处理命令
 */
@Target({ElementType.TYPE, ElementType.ANNOTATION_TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Component
@Scope("prototype")
@AggregateRoot
public @interface Aggregate {
    /**
     * 聚合名称。默认是被标注的类的简单名称（class simple name）。需唯一
     * @return
     */
    String naming() default "";

    /**
     * 对外聚合名称。本地
     * @return
     */
    String labelNaming() default "";
}
